package schach.client.view;


import java.awt.event.*;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.TextArea;
import java.io.File;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.imageio.*;

import schach.GameController;
import schach.client.controller.ClientController;
import schach.server.controller.GameControllerImpl;
import schach.server.controller.ServerController;
import schach.server.model.Feld;

import java.awt.image.BufferedImage;


public class SchachbrettClient extends Frame implements ActionListener {
	
	//private GameController controller;
	private ClientController client;
	private int gedruecktX = -1;
	private int gedruecktY = -1;
	private boolean amZug = false;
	private TextArea text;
	
	public void setAmZug(boolean amZug) {
		this.amZug = amZug;
	}

	public SchachbrettClient() throws RemoteException, IOException {
		try {
			client = new ClientController(this);
		} catch (NotBoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//controller = server.getController();
		
		setSize(960, 700);
		setLayout(null);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++) {
				Knopf button = new Knopf(i, j);
				add(button);
				button.addActionListener(this);
				
			}
		}
		text = new TextArea();
		text.setLocation(180, 590);
		text.setSize(600, 100);
		add(text);
		client.empfange();
	}
		
	public void paint (Graphics g)
	{
		BufferedImage bild = null;
		try {
			bild = ImageIO.read(new File("src/Logos.png"));
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		g.drawImage(bild, 0, 25, 960, 150, null);
	
		if(amZug){
			text.append("Sie sind am Zug! \n");
		}
		else
			text.append("Weiss ist am Zug! \n");
		
		int [][] feld = new int [8][8];
		for (int i=0;i<4;i++)
			for (int j=0;j<4;j++)
			{
				feld[0+2*i][1+2*j] = 1;
				feld[1+2*i][0+2*j] = 1;
			}

		for (int zei = 0; zei < 8; zei++)
			for (int spa = 0; spa < 8; spa++) {
				g.drawRect(50 + zei * 50, 180 + spa * 50, 50, 50);
				if (feld[zei][spa] == 1)
					g.fillRect(50 + zei * 50, 180 + spa * 50, 50, 50);
				if (feld[zei][spa] != 1){
					g.setColor(Color.white);
					g.fillRect(50 + zei * 50, 180 +spa * 50, 50, 50);
					g.setColor(Color.black);
				}
			}
		
		ArrayList<ArrayList<Feld>> figuren = null;
		try {
			figuren = client.getController().getBrett().getFelder();
		} catch (RemoteException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		for (ArrayList<Feld> reihe : figuren){
			for (Feld feld1 : reihe){
				if (feld1.getFigur() != null){
					String figurName = feld1.getFigur().getClass().getName();
					new Bild(figurName, feld1.getFigur().isBlack(), feld1.getFigur().getPosition().getX(), feld1.getFigur().getPosition().getY(), g);
				}
				
			}
			
		}
		
	}

	public static void main(String[] args) throws RemoteException, IOException {
		new SchachbrettClient().setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Knopf knopf = (Knopf) e.getSource();
		System.out.println(knopf.getX() + "" + knopf.getY());
		//client.empfange();
		if(amZug){
		if (gedruecktX == -1){
			gedruecktX = knopf.getX();
			gedruecktY = knopf.getY();
		}
		else{	
			try {
				client.getController().macheZug(new Feld(gedruecktX, gedruecktY), new Feld(knopf.getX(), knopf.getY()), true);
				client.sendeZug();
				System.out.println("Client sende  unmöglichen Zug");
				gedruecktX = -1;
				gedruecktY = -1;
				amZug = false;
				client.empfange();
			} catch (RemoteException e1) {
				// TODO Auto-generated catch block
				System.out.println("Zug Fehldgeschlagen, auf zum nächsten Versuch!");
				text.append("Zug Fehldgeschlagen, auf zum nächsten Versuch! \n");
				gedruecktX = -1;
				gedruecktY = -1;
				amZug = true;
			} catch (NullPointerException e2){
				System.out.println("Unmöglicher Zug!!!");
				text.append("Unmöglicher Zug!!! \n");
				gedruecktX = -1;
				gedruecktY = -1;
				amZug = true;
			}

			this.paint(getGraphics());
			//Hier auf empfangen gehen
			/*
			try {
				controller.macheZug(new Feld(gedruecktX, gedruecktY), new Feld(knopf.getX(), knopf.getY()), schwarzAmZug);
			} catch (RemoteException e1) {
				// TODO Auto-generated catch block
				System.out.println("Zug Fehldgeschlagen, auf zum nächsten Versuch!");
				gedruecktX = -1;
				gedruecktY = -1;
				schwarzAmZug = !schwarzAmZug;				
			} catch (NullPointerException e2){
				System.out.println("Unmöglicher Zug!!!!");
			}
			gedruecktX = -1;
			gedruecktY = -1;
			schwarzAmZug = !schwarzAmZug;
			super.paint(getGraphics());
			this.paint(getGraphics());
			*/
		}
		}
		
	}
}